/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package lab1;

import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author rafael
 */
public class Pessoa {
    private String nome;
    private int idade;
    private char sexo;
    private Pessoa conjuge;
    private Pessoa pai;
    private Pessoa mae;
    private List<Pessoa> filhos = new ArrayList<Pessoa>();
    private List<Pessoa> tios = new ArrayList<Pessoa>();
    private List<Pessoa> primos = new ArrayList<Pessoa>();

    public int getIdade() {
        return idade;
    }

    public void setIdade(int idade) {
        this.idade = idade;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public char getSexo() {
        return sexo;
    }

    public void setSexo(char sexo) {
        this.sexo = sexo;
    }

    public void casar(Pessoa p) {
        if(this.sexo != p.sexo && this.idade >= 18 && p.idade >= 18) {
            this.conjuge = p;
            p.conjuge = this;
        }// nao vejo se ele ja possiu um casamento, apenas o substituo
    }

    public void setPai(Pessoa p) {
        p.filhos.add(this);
        this.pai = p;
    }
    public void setMae(Pessoa p) {
        p.filhos.add(this);
        this.mae = p;
    }
    public Pessoa getPai() {
        return this.pai;
    }
    public Pessoa getMae() {
        return this.mae;
    }
    public void ImprimeFilhos() {
        if(this.filhos.isEmpty()) {
            System.out.println("Nao possui filhos");
        }
        else {
            for(int i=0; i < this.filhos.size(); i++) {
                System.out.println(this.filhos.get(i).nome);
            }
        }
    }
    public void ImprimeIrmaos() {
        if(this.pai != null) {
            if(this.pai.filhos.size() > 1) {
                for(int i=0; i < this.pai.filhos.size(); i++) {
                    if(this.pai.filhos.get(i) != this) {
                        System.out.println(this.pai.filhos.get(i).nome);
                    }
                }
            }
        }
        else {
            System.out.println("Nao possui irmaos");
        }
    }
    public void ImprimeTios() {
        if(this.pai.pai != null) {
            this.tios.addAll(this.pai.pai.filhos);
            this.tios.remove(this.pai);
        }
        if(this.mae.pai != null) {
            this.tios.addAll(this.mae.pai.filhos);
            this.tios.remove(this.mae);
        }
        if(this.tios.size() > 1) {
            for(int i=0; i< this.tios.size(); i++) {
                if(this.tios.get(i) != this.pai && this.tios.get(i) != this.mae) {
                    System.out.println(this.tios.get(i).nome);
                }
            }
        }
        else {
            System.out.println("Nao possui tios");
        }
    }
    public void ImprimePrimos() {
        int flag = 0;
        if(this.tios.isEmpty()) {
            System.out.println("Nao possui primos");
        }
        else {
            for(int i=0; i< this.tios.size(); i++) {
                if(this.tios.get(i).filhos.size() > 0) {
                    for(int j=0; j < this.tios.get(i).filhos.size(); j++ ) {
                        System.out.println(this.tios.get(i).filhos.get(j).nome);
                        flag = 1;
                    }
                }
            }
            if(flag == 0) {
                System.out.println("Nao possui primos");
            }
        }

    }
    public void ImprimiNetos() {
        int flag = 0;
        if(this.filhos.isEmpty()) {
            System.out.println("Nao possui netos");
        }
        else {
            for(int i=0; i < this.filhos.size(); i++) {
                if(this.filhos.get(i).filhos.size() > 0) {
                    for(int j=0; j < this.filhos.get(i).filhos.size(); j++) {
                        System.out.println(this.filhos.get(i).filhos.get(j).nome);
                        flag = 1;
                    }
                }
            }
            if(flag == 0) {
                System.out.println("Nao possui netos");
            }
        }
    }
    Pessoa(String n, int age, char s) {
		this.idade = age;
		this.nome = n;
		this.sexo = s;
    }


}
